package com.zjsru.plan2025.oneday;

/**
 * 2145. 统计隐藏数组数目
 *
 * @Author: cookLee
 * @Date: 2025-04-21
 */
public class NumberOfArrays {

    /**
     * 主
     * \
     * 输入：differences = [1,-3,4], lower = 1, upper = 6
     * 输出：2
     * 解释：符合要求的隐藏数组为：
     * - [3, 4, 1, 5]
     * - [4, 5, 2, 6]
     * 所以返回 2 。
     * \
     * 输入：differences = [3,-4,5,1,-2], lower = -4, upper = 5
     * 输出：4
     * 解释：符合要求的隐藏数组为：
     * - [-3, 0, -4, 1, 2, 0]
     * - [-2, 1, -3, 2, 3, 1]
     * - [-1, 2, -2, 3, 4, 2]
     * - [0, 3, -1, 4, 5, 3]
     * 所以返回 4 。
     * \
     *
     * @param args args
     */
    public static void main(String[] args) {
        NumberOfArrays numberOfArrays = new NumberOfArrays();
        System.out.println(numberOfArrays.numberOfArrays(new int[]{1, -3, 4}, 1, 6));
    }

    public int numberOfArrays(int[] differences, int lower, int upper) {
        int t1 = 0, t2 = 0;
        int cur = 0;
        for (int difference : differences) {
            //获取在lower和upper范围内不超限的数字
            cur += difference;
            t1 = Math.min(t1, cur);
            t2 = Math.max(t2, cur);
            //超出范围
            if (t2 - t1 > upper - lower) {
                return 0;
            }
        }
        //在upper - lower范围滑动(t2 - t1)长度的窗口
        return Math.max(0, upper - lower - (t2 - t1) + 1);
    }

}
